package co.edu.udea.iw.rtf.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.rtf.dao.SucursalDAO;
import co.edu.udea.iw.rtf.dto.Sucursal;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

public class SucursalDAOImpl extends HibernateDaoSupport implements SucursalDAO {

	/**
	 * Metodo que obtiene una lista de solicitudes que se encuentra activas en la base de datos
	 * Crea una ArrayList al cual asigna la lista de sucursales obtenidas en la consulta de Session Hibernate y luego los retorna
	 * @return List<Sucursal>
	 */
	@Override
	public List<Sucursal> obtenerActivas() throws RTFDaoException {
		try{
			
			List<Sucursal> sucursales = new ArrayList<Sucursal>();
		
			Session sesion = null;
		
			sesion = getSession();
			
			sucursales = sesion.createCriteria(Sucursal.class)
							.addOrder(Order.asc("nombre"))
							.add(Restrictions.eq("activo", true))
							.list();
			
			return sucursales;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
	}
	
	/**
	 * Metodo que obtiene los datos de una sucursal de acuerdo a su codigo
	 * Crea un objeto de tipo Sucursal al cual asigna los datos obtenidos por medio de Session Hibernate
	 * @param codigo
	 * @return Sucursal
	 */
	@Override
	public Sucursal obtener(Integer codigo) throws RTFDaoException {
		try{
			
			Sucursal sucursal;
			Session sesion = null;
		
			sesion = getSession();
			
			sucursal = (Sucursal)sesion.get(Sucursal.class, codigo);

			return sucursal;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
		
	}

}
